As an increasing number of applications and services are being made available over networks such as the Internet, and as an increasing amount of data is being stored remotely, an increasing number of content, application, and/or service providers are turning to centralized or shared resource technologies, such as cloud computing and data warehousing. As the amount of traffic increases, there is a corresponding need to increase the capacity of these shared resources and also improve the efficiency of data transmission.
In a shared environment, such as a multi-tenant environment where there can be multiple virtual machines running on a common set of hardware components, it is often the case that there is a significant amount of contention for one or more of these components. For example, there might be multiple virtual machines sharing a common network interface card (NIC). In many conventional systems, access to a component such as a NIC relies upon a “fairness” approach among peers, wherein each virtual machine will “play fair” and utilize at most its fair share of the capacity of the NIC, as well as any queues or buffers utilized by, or in conjunction with, the NIC. A virtual machine or other component unfairly consuming a disproportionate amount of this capacity can negatively impact other peers sharing that resource. Once way to constrain these peers in conventional systems is to throttle the throughput, such that any virtual machine or other such component cannot exceed a certain data rate even if there is available capacity of the resource. Even if the bandwidth or throughput is divided relatively evenly between peers, however, the additional latency introduced by one peer misbehaving might be too much for another peer to handle. For example, even in the presence of network throughput throttling, a peer performing an action such as a large file transfer can cause the performance of the system to slow down, which can increase latency experienced by other peers sharing that hardware.